package com.bdqn.cloud.filter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
import org.springframework.stereotype.Component;

@Component
public class LogFilter extends ZuulFilter {
    /**
     * 在路由的时候执行
     *
     * @return
     */
    @Override
    public String filterType() {
        System.out.println("filterType................");

/*      微服务中Zuul服务网关一共定义了四种类型的过滤器：
        pre：在请求被路由（转发）之前调用
        route：在路由（请求）转发时被调用
        error：服务网关发生异常时被调用
        post：在路由（转发）请求后调用*/
/*        public static final String ERROR_TYPE = "error";
        public static final String POST_TYPE = "post";
        public static final String PRE_TYPE = "pre";
        public static final String ROUTE_TYPE = "route";*/
        return FilterConstants.ROUTE_TYPE;
    }

    /**
     * 返回一个 int值来指定过滤器的执行顺序，不同的过滤器允许返回相同的数字。
     * 多个过滤器值小的先执行
     * @return
     */
    @Override
    public int filterOrder() {
        System.out.println("filterOrder................");
        return FilterConstants.PRE_DECORATION_FILTER_ORDER;
    }

    /**
     * 是否执行过滤器
     *
     * @return
     */
    @Override
    public boolean shouldFilter() {
        System.out.println("shouldFilter................");
        return true;
    }

    /**
     * 在路由的时候执行run方法
     *
     * @return
     * @throws ZuulException
     */
    @Override
    public Object run() throws ZuulException {
        System.out.println("logFilter........................");
        //System.out.println(1/0);
        //目前返回的null没有意义
        return null;
    }

}
